package com.ruoyi.common.core.domain.entity.socket.bean;

import com.ruoyi.common.constant.socket.DeviceTypeContant;
import com.ruoyi.common.core.domain.entity.system.SysBoat;
import lombok.Data;

import java.util.Date;

/**
 * 泡泡豚船只当前实时状态数据对象。
 */
@Data
public class PaopaoTunBoatInfo extends BaseDataPiece {

    /**
     * 船只状态。4个bit，取值范围：0-15，可能取值：0：无操作，1：空闲，2：手动，3：自动，4：离线，5：维护，6-14：保留，15：无效值
     */
    private byte boatStatus;
    /**
     * 支付状态。2个bit，取值范围：0-3，可能取值：0：无操作，1：已支付，2：未支付，3：无效值
     */
    private byte payStatus;
    /**
     * 安全须知确认状态。2个bit，取值范围：0-3，可能取值：0：无操作，1：已确认，2：未确认，3：无效值
     */
    private byte safetyInstructionConfirStatus;
    /**
     * 解锁状态。4个bit，取值范围：0-15，可能取值：0：无操作，1：解锁成功，2：解锁失败，3-14：保留，15：无效值
     */
    private byte unlockStatus;
    /**
     * 上锁状态。4个bit，取值范围：0-15，可能取值：0：无操作，1：上锁成功，2：上锁失败，3：上锁条件不满足，,4-14：保留，15：无效值
     */
    private byte lockStatus;
    /**
     * 自动进港状态。4个bit，取值范围：0-15，可能取值：0：无操作，1：自动进港准备好，2：自动进港中，3：自动进港成功，4：自动进港失败，5-14：保留，15：无效值
     */
    private byte autoEntryPortStatus;
    /**
     * 自动航线状态。4个bit，取值范围：0-15，可能取值：0：无操作，1：自动航线准备好，2：自动航线中，3：自动航线成功，4：自动航线失败，5-14：保留，15：无效值
     */
    private byte autoShiplineStatus;

    /**
     * 任务数据更新时间。
     */
    private Date taskDataUpdateTime;

    /**
     * 当前船只上的电子围栏信息的更新时间。
     */
    private Date fenceUpdateTime;

    /**
     * 单次时长。单位：1秒。
     */
    private int onceDuration;

    /**
     * 累计时长。单位：1秒。
     */
    private long aggregateDuration;
    /**
     * 单次里程。单位：100米。
     */
    private int onceDistance;

    /**
     * 累计里程。单位：100米。
     */
    private long aggregateDistance;
    /**
     * 单次耗电。单位：1W。
     */
    private int oncePowerConsumption;
    /**
     * 累计耗电。单位：1W。
     */
    private long aggregatePowerConsumption;

    /**
     * 剩余时间。单位：1秒。
     */
    private int remainTime;
    /**
     * 剩余里程。单位：100米。
     */
    private int remainDistance;
    /**
     * 返回时间。单位：1秒。
     */
    private int backTime;
    /**
     * 返回里程。单位：100米。
     */
    private int backDistance;
    /**
     * 码头配置数据更新时间。
     */
    private Date wharfConfigDataUpdateTime;
    /**
     * 电子围栏报警状态。0：无报警，1：黄区报警，2：红区报警，3：无效值
     */
    private byte fenceAlarmStatus;
    private SysBoat sysBoat;


    @Override
    public int getDataPieceLength() {
        return 50;
    }

    @Override
    public void setDeviceType() {
        deviceType = DeviceTypeContant.PaopaoTunInfo;
    }

    public PaopaoTunBoatInfo() {
        this((byte) 0, (byte) 1);
    }

    public PaopaoTunBoatInfo(byte systemCode, byte deviceCode) {
        super(systemCode, deviceCode);
    }
}
